package com.system.manager.modules.risk.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.system.manager.common.constant.SysConstants;
import com.system.manager.common.entity.PageDTO;
import com.system.manager.common.enums.fileType.ImageFile;
import com.system.manager.common.enums.fileType.VideoFile;
import com.system.manager.modules.authorized.entity.User;
import com.system.manager.modules.risk.entity.TbFile;
import com.system.manager.modules.risk.mapper.TbFileMapper;
import com.system.manager.modules.risk.service.ITbFileService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.system.manager.utils.FileUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author yxp
 * @since 2021-11-23
 */
@Service
public class TbFileServiceImpl extends ServiceImpl<TbFileMapper, TbFile> implements ITbFileService {

    @Autowired
    private TbFileMapper tbFileMapper;
    //产看所有的文件
    @Override
    public PageDTO<TbFile> selectFiles(Integer currPage, Integer size) {
        IPage<TbFile> filePage = new Page<>(currPage, size);
        // 1.查询出当前所有的对象，并进行分页封装
        page(filePage, new QueryWrapper<TbFile>());

        // 2.将查询出来的数据返回给前端
        PageDTO<TbFile> filePageDTO = new PageDTO<>();
        filePageDTO.setData(filePage.getRecords());
        filePageDTO.setCount(filePage.getTotal());
        return filePageDTO;
    }

    //修改文件的状态
    @Override
    public void updateState(Integer fileId) {
        /*QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("file_id",fileId);
        TbFile tbFile = tbFileMapper.selectOne(wrapper);*/

        TbFile file = new TbFile();
        file.setFileId(fileId);
        file.setFileState(1);
        tbFileMapper.updateById(file);
    }

    //根据多个文件id查询多个的文件
    @Override
    public List<TbFile> findAllByStationId(List<Integer> listFileId) {
        List<TbFile> resultListFile = new ArrayList<>();
        for (Integer integer : listFileId) {
            QueryWrapper wrapper = new QueryWrapper();
            wrapper.eq("file_id",integer);
            TbFile tbFile = tbFileMapper.selectOne(wrapper);
            resultListFile.add(tbFile);
        }
        return resultListFile;
    }

    /*
    上传文件
     */

    @Override
    public String upLoadFile(MultipartFile file) {
        //文件原名字
        String fileName = file.getOriginalFilename();

        //文件前缀名
        String pref = fileName.substring(0,fileName.lastIndexOf("."));

        //文件后缀名
        String suffix = fileName.substring(fileName.lastIndexOf("."));

        //文件的相对路径
        String result = "";

        try {

        //文件生成路径
        //文件在服务器中的数据
        result = FileUtil.uploadFile(file.getBytes(), SysConstants.SYS_OUT_DIR,fileName);

        //封装成对象
        TbFile tbFile = new TbFile();

        //判断文件后缀名是视频还是文件
        if(ImageFile.ALL.isValid(suffix)){
            tbFile.setFileType("图片");
        }else if(VideoFile.ALL.isValid(suffix)){
            tbFile.setFileType("视频");
        }else {
            tbFile.setFileType("文件");
        }

        tbFile.setFileName(pref);
        tbFile.setFileState(0);
        tbFile.setFile(result);
        tbFileMapper.insert(tbFile);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

    /*
    根据文件id求文件类型
     */
    @Override
    public String selectStateByFileId(Integer fileId) {
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("file_id",fileId);
        TbFile tbFile = tbFileMapper.selectOne(wrapper);
        System.out.println("============================================="+tbFile.toString());
        String fileType = tbFile.getFileType();
        return fileType;

    }
}
